使用ora2pg完成从Oracle到Postgres的迁移
执行从Oracle到Postgres的迁移,非常重要的一个部分是选择正确的工具来帮助进行系统间的转换。当人们问我应该如何开始迁移过程,我喜欢推荐一个功能强大的开源工具,叫做“ora2pg”。
顾名思义,ora2pg是一种通过生成兼容的SQL文件将Oracle(或MySQL)数据库迁移到PostgreSQL的工具。正如文档所述,ora2pg“连接Oracle数据库,自动扫描并提取其结构或数据,然后生成SQL脚本,您可以将其加载到PostgreSQL数据库中。”
导出完整数据库schema(表,视图,序列,索引),并带有唯一键、主键、外键和检查约束。
*导出用户和组的grants/privileges。
*导出范围/列表分区和子分区。
*Oracle数据库的迁移成本评估。
*Oracle数据库的迁移难度级别评估。
*文件中PL / SQL代码的迁移成本评估。
摘要
建立演示环境
关于如何安装ora2pg的演示,我们使用的是安装了Oracle 12.1的Centos 7.7环境。我们还将使用ora2pg 20.0。ora2pg既可以在PostgreSQL服务器上运行,也可以在Oracle服务器上运行。ora2pg在我的Oracle服务器上运行。在此演示中,我使用了一个虚拟机来创建我的环境,我将假定您已经设置了Oracle环境。
`sudo yum install -y gcc postgresql11-devel \ perl-ExtUtils-MakeMaker perl-DBI
perl-DBD-Pg perl-tests`
*您将需要从以下站点下载建议的Oracle 12.2 Basic&SDK Instantclient RPM,即sqlplus。https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
要安装软件包,只需运行:
sudo yum localinstall -y /path/to/oracle-instantclient12*.rpm
# InstantClient
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PAT
export PATH=$ORACLE_HOME/bin:$PATH
`source ~/.bash_profile`
sqlplus hr/hr1234@//192.168.99.21:1521/ORCLPDB1
Building的先决条件
sudo yum install perl-devel
sudo yum install perl-DBI.x86_64
Build/Install DBD::Oracle
sudo yum install wget
wget https://cpan.metacpan.org/authors/id/Z/ZA/ZARQUON/DBD-Oracle-1.76.tar.gz
tar -xvzf DBD-Oracle-1.76.tar.gz
cd DBD-Oracle-1.76
perl Makefile.PL
make && make test
sudo make install
sudo yum install perl-CPAN
perl -MCPAN -e 'install DBD::Oracle' # configure for sudo
Build/Install ora2pg
wget https://github.com/darold/ora2pg/archive/v20.0.tar.gz
tar -xvzf v20.0.tar.gz
cd ora2pg-20.0
perl Makefile.PL
make
sudo make install
配置ora2pg
In ora2pg-20.0/ora2pg.conf:
PG_VERSION 11
ORACLE_DSN
dbi:Oracle:host=192.168.99.21;port=1521;service_name=ORCLPDB1
ORACLE_USER hr
ORACLE_PWD hr1234
USER_GRANTS 1
EXPORT_SCHEMA 1
SCHEMA hr
TRANSACTION READONLY
# This is needed for Oracle XE 11 with ora2pg <= v20, but safe
# to add for any version
SYSUSERS APEX_040000
测试ora2pg
$ ora2pg -t SHOW_VERSION -c ora2pg.conf
评估报告
$ ora2pg -t SHOW_REPORT --estimate_cost -c ora2pg.conf
您将要做的工作
下面,我想提供一些要点,供您从Oracle迁移到PostgreSQL时考虑。
*记住,在进行迁移之前,您的团队需要PostgreSQL培训。在迁移之前有更多的PostgreSQL知识可以带来更加有效的迁移,并且您可以在迁移过程中了解有关Oracle和PostgreSQL的更多信息。
*您应该对Oracle数据库体系结构进行深入分析。如前所述,ora2pg不会迁移每个对象或函数。最好是分析Oracle数据库,确定是否可以更改其中的一些内容,以使迁移更容易。
*考虑连接到数据库的应用程序。您需要确保您没有使用PostgreSQL的第三方应用程序。
*最后,确保你做了研究。这可能很乏味,但做研究总比把所有东西都弄坏好。通过阅读这篇文章,你已经在研究了。
*事务在PostgreSQL中的实现与在Oracle中的不同。Oracle支持嵌套事务,而Postgresql不支持。通常,您可以使用PostgreSQL保存点来实现类似的行为,但如果您的Oracle部署广泛使用PL/SQL并使用嵌套事务,您可能需要进行一些手动移植。
*PostgreSQL和Oracle中的模式是不同的。在PostgreSQL中,模式对象被用来为数据库添加命名空间或作用域。在PostgreSQL中,模式独立于用户、组或角色对象。
*在PostgreSQL中,角色、用户和组都是全局对象——角色/用户/组不是数据库的一部分,它们独立于PostgreSQL实例中的所有数据库。角色/用户/组可以被授予实例中的任何数据库的特权。用户实例一次可以直接连接到集群中的一个数据库。
*Oracle提供了数百个软件包。如果您广泛使用Oracle软件包,则可能需要提前进行一些手动移植。
*Oracle和PostgreSQL都提供了存储过程和用户定义函数。PostgreSQL在服务器中支持多种嵌入式语言。最常用的过程式服务器端语言——Oracle中的PL/SQL和PostgreSQL中的PL/ pgsql——非常相似,ora2pg可以直接翻译一些函数或UDF。它将识别那些它不能直接转化和识别问题。
*在PostgreSQL中,有一些常见的替代方案可以替代Oracle的原生动态SQL,EXECUTE IMMEDIATE -参见使用dblink PostgreSQL扩展。
*PostgreSQL提供了一种扩展核心的方法——PostgreSQL扩展。这是一个大量且不断增长的扩展。值得去检查扩展,看看是否有一些可以帮助您迁移的。
本文作者:yorvi arias
I Love PG
关于我们
中国开源软件推进联盟PostgreSQL分会(简称:中国PG分会)于2017年成立,由国内多家PostgreSQL生态企业所共同发起,业务上接受工信部中国电子信息产业发展研究院指导。中国PG分会是一个非盈利行业协会组织。我们致力于在中国构建PostgreSQL产业生态,推动PostgreSQL产学研用发展。
欢迎投稿
做你的舞台,show出自己的才华 。
投稿邮箱:partner@postgresqlchina.com
——愿能安放你不羁的灵魂
PostgreSQL学习的九层宝塔
PostgreSQL职业发展与学习攻略2019,年度数据库舍 PostgreSQL 其谁?Postgres是最好的开源软件PostgreSQL是世界上最好的数据库
从Oracle迁移到PostgreSQL的十大理由从“非主流”到“潮流”,开源早已值得拥有
PG活动精彩回顾
创建PG全球生态!PostgresConf.CN2019大会盛大召开
首站起航!2019“让PG‘象’前行”上海站成功举行
走进蓉城丨2019“让PG‘象’前行”成都站成功举行
中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行群英论道聚北京,共话PostgreSQL
相聚巴厘岛| PG Conf.Asia 2019 DAY0、DAY1简报
相知巴厘岛| PG Conf.Asia 2019 DAY2简报独家|硅谷Postgres大会简报直播回顾 | Bruce Momjian:原生分布式将在PG 14版本发布
PG培训认证精彩回顾
中国首批PGCA认证考试圆满结束,203位考生成功获得认证!中国第二批PGCA认证考试圆满结束,115位考生喜获认证!重要通知:三方共建,中国PostgreSQL认证权威升级!近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!2020年首批 | 中国PostgreSQL初级认证考试圆满结束一分耕耘一分收获,第五批次PostgreSQL认证考试成绩公布